{
PangoFontMap *fontmap;
PangoContext *context;
- const cairo_font_options_t *options;
double dpi;
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
fontmap = pango_cairo_font_map_get_default ();
context = pango_font_map_create_context (fontmap);
- options = gdk_screen_get_font_options (screen);
- pango_cairo_context_set_font_options (context, options);
-
dpi = gdk_screen_get_resolution (screen);
pango_cairo_context_set_resolution (context, dpi);
*/
-static void gdk_screen_finalize (GObject *object);
static void gdk_screen_set_property (GObject *object,
guint prop_id,
const GValue *value,
enum
{
PROP_0,
- PROP_FONT_OPTIONS,
PROP_RESOLUTION
};
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gdk_screen_finalize;
object_class->set_property = gdk_screen_set_property;
object_class->get_property = gdk_screen_get_property;
- g_object_class_install_property (object_class,
- PROP_FONT_OPTIONS,
- g_param_spec_pointer ("font-options",
- P_("Font options"),
- P_("The default font options for the screen"),
- G_PARAM_READWRITE|G_PARAM_STATIC_NAME|
- G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
-
g_object_class_install_property (object_class,
PROP_RESOLUTION,
g_param_spec_double ("resolution",
screen->resolution = -1.;
}
-static void
-gdk_screen_finalize (GObject *object)
-{
- GdkScreen *screen = GDK_SCREEN (object);
-
- if (screen->font_options)
- cairo_font_options_destroy (screen->font_options);
-
- G_OBJECT_CLASS (gdk_screen_parent_class)->finalize (object);
-}
-
void
_gdk_screen_close (GdkScreen *screen)
{
}
}
-/**
- * gdk_screen_set_font_options:
- * @screen: a #GdkScreen
- * @options: (allow-none): a #cairo_font_options_t, or %NULL to unset any
- * previously set default font options.
- *
- * Sets the default font options for the screen. These
- * options will be set on any #PangoContext’s newly created
- * with gdk_pango_context_get_for_screen(). Changing the
- * default set of font options does not affect contexts that
- * have already been created.
- *
- * Since: 2.10
- **/
-void
-gdk_screen_set_font_options (GdkScreen *screen,
- const cairo_font_options_t *options)
-{
- g_return_if_fail (GDK_IS_SCREEN (screen));
-
- if (screen->font_options != options)
- {
- if (screen->font_options)
- cairo_font_options_destroy (screen->font_options);
-
- if (options)
- screen->font_options = cairo_font_options_copy (options);
- else
- screen->font_options = NULL;
-
- g_object_notify (G_OBJECT (screen), "font-options");
- }
-}
-
-/**
- * gdk_screen_get_font_options:
- * @screen: a #GdkScreen
- *
- * Gets any options previously set with gdk_screen_set_font_options().
- *
- * Returns: (nullable): the current font options, or %NULL if no
- * default font options have been set.
- *
- * Since: 2.10
- **/
-const cairo_font_options_t *
-gdk_screen_get_font_options (GdkScreen *screen)
-{
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- return screen->font_options;
-}
-
/**
* gdk_screen_set_resolution:
* @screen: a #GdkScreen
switch (prop_id)
{
- case PROP_FONT_OPTIONS:
- g_value_set_pointer (value, (gpointer) gdk_screen_get_font_options (screen));
- break;
case PROP_RESOLUTION:
g_value_set_double (value, gdk_screen_get_resolution (screen));
break;
switch (prop_id)
{
- case PROP_FONT_OPTIONS:
- gdk_screen_set_font_options (screen, g_value_get_pointer (value));
- break;
case PROP_RESOLUTION:
gdk_screen_set_resolution (screen, g_value_get_double (value));
break;
const gchar *name,
GValue *value);
-GDK_AVAILABLE_IN_ALL
-void gdk_screen_set_font_options (GdkScreen *screen,
- const cairo_font_options_t *options);
-GDK_AVAILABLE_IN_ALL
-const cairo_font_options_t *gdk_screen_get_font_options (GdkScreen *screen);
-
GDK_AVAILABLE_IN_ALL
void gdk_screen_set_resolution (GdkScreen *screen,
gdouble dpi);
{
GObject parent_instance;
- cairo_font_options_t *font_options;
gdouble resolution; /* pixels/points scale factor for fonts */
guint resolution_set : 1; /* resolution set through public API */
guint closed : 1;
gint font_size;
gboolean font_size_absolute;
gchar *font_family;
+ cairo_font_options_t *font_options;
};
struct _GtkSettingsValuePrivate
settings_update_provider (priv->screen, &priv->key_theme_provider, NULL);
g_slist_free_full (priv->style_cascades, g_object_unref);
+ if (priv->font_options)
+ cairo_font_options_destroy (priv->font_options);
+
g_free (priv->font_family);
G_OBJECT_CLASS (gtk_settings_parent_class)->finalize (object);
cairo_antialias_t antialias_mode;
gchar *rgba_str;
cairo_subpixel_order_t subpixel_order;
- cairo_font_options_t *options;
+
+ if (priv->font_options)
+ cairo_font_options_destroy (priv->font_options);
g_object_get (settings,
"gtk-xft-antialias", &antialias,
"gtk-xft-rgba", &rgba_str,
NULL);
- options = cairo_font_options_create ();
+ priv->font_options = cairo_font_options_create ();
- cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_ON);
+ cairo_font_options_set_hint_metrics (priv->font_options, CAIRO_HINT_METRICS_ON);
hint_style = CAIRO_HINT_STYLE_DEFAULT;
if (hinting == 0)
g_free (hint_style_str);
- cairo_font_options_set_hint_style (options, hint_style);
+ cairo_font_options_set_hint_style (priv->font_options, hint_style);
subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
if (rgba_str)
g_free (rgba_str);
- cairo_font_options_set_subpixel_order (options, subpixel_order);
+ cairo_font_options_set_subpixel_order (priv->font_options, subpixel_order);
antialias_mode = CAIRO_ANTIALIAS_DEFAULT;
if (antialias == 0)
antialias_mode = CAIRO_ANTIALIAS_GRAY;
}
- cairo_font_options_set_antialias (options, antialias_mode);
-
- gdk_screen_set_font_options (priv->screen, options);
-
- cairo_font_options_destroy (options);
+ cairo_font_options_set_antialias (priv->font_options, antialias_mode);
}
static gboolean
g_free (key_theme_name);
}
+const cairo_font_options_t *
+gtk_settings_get_font_options (GtkSettings *settings)
+{
+ return settings->priv->font_options;
+}
GdkScreen *
_gtk_settings_get_screen (GtkSettings *settings)
const GValue *src_value,
GParamSpec *pspec,
GValue *dest_value);
+const cairo_font_options_t *
+ gtk_settings_get_font_options (GtkSettings *settings);
GdkScreen *_gtk_settings_get_screen (GtkSettings *settings);
GtkStyleCascade *_gtk_settings_get_style_cascade (GtkSettings *settings,
gint scale);
{
PangoFontDescription *font_desc;
GtkStyleContext *style_context;
- GdkScreen *screen;
+ GtkSettings *settings;
cairo_font_options_t *font_options;
style_context = _gtk_widget_get_style_context (widget);
GTK_CSS_PROPERTY_DPI),
100));
- screen = gtk_widget_get_screen_unchecked (widget);
+ settings = gtk_widget_get_settings (widget);
font_options = (cairo_font_options_t*)g_object_get_qdata (G_OBJECT (widget), quark_font_options);
- if (screen && font_options)
+ if (settings && font_options)
{
cairo_font_options_t *options;
- options = cairo_font_options_copy (gdk_screen_get_font_options (screen));
+ options = cairo_font_options_copy (gtk_settings_get_font_options (settings));
cairo_font_options_merge (options, font_options);
pango_cairo_context_set_font_options (context, options);
cairo_font_options_destroy (options);
}
- else if (screen)
+ else if (settings)
{
pango_cairo_context_set_font_options (context,
- gdk_screen_get_font_options (screen));
+ gtk_settings_get_font_options (settings));
}
pango_context_set_font_map (context, gtk_widget_get_effective_font_map (widget));